/**
 * @defgroup TestDataOutAndPrint 关于Java读写机制的例子
 * @author 李焕帅
 * @version 0.1
 * @date 31/07/2012
 * @{
 */
package indd.lihs.basic.javabasictester.io;

import java.io.*;

/**
 * @name 测试类定义
 * @{
 */
public class TestDataOutAndPrint
{
    /**
     * 主函数
     * @param[in] args 参数字符串数组
     * @return void
     * @note 某个方法可能抛出某种异常,但其中没有定义相应的捕获代码.这时如果抛出,\n
     * 则系统直接退出该方法,并将异常发回给调用者其中, 如果父类的方法没有声明某种必\n
     * 检异常,子类进行方法覆盖时,也不能声明
     */
	public static void main(String[] args)
	{
		int num = 0;
		int sum = 0;
		DataInputStream din = null;
		DataOutputStream dout = null;
		PrintStream pout = null;
		
		try
		{ //写出数据
			dout = new DataOutputStream(new BufferedOutputStream(
			                              new FileOutputStream("data.bin")));
			for(int i = 1; i <= 8; i++)
			{
				dout.writeInt(i * 11);	//输出二进制格式
			}
			dout.writeUTF("以上是需要求和的整数"); //宽字符形式
		}
		catch (IOException ex)
		{
			System.out.println(ex);
			ex.printStackTrace();
		}
		finally
		{
			try
			{
				if(dout != null) dout.close();
			}
			catch (IOException ex)
			{
				System.out.println(ex);
				ex.printStackTrace();
			}
		}
		
		try
		{ //读入数据
			din = new DataInputStream(new BufferedInputStream(
			                                new FileInputStream("data.bin")));
			pout = new PrintStream(new BufferedOutputStream(
			                                new FileOutputStream("sum.txt")));
			for(int i = 1; i <= 8; i++)
			{
				num = din.readInt();
				pout.print(num + " ");		//输出文本格式
				sum += num;
			}
			pout.println();
			pout.println(din.readUTF());
			pout.println("sum = " + sum);
		}
		catch (IOException ex)
		{
			ex.printStackTrace();
			System.out.println(ex);
		}
		finally
		{
			try
			{
				if(din != null) din.close();
				if(pout != null) pout.close();
			}
			catch (IOException ex)
			{
				ex.printStackTrace();
				System.out.println(ex);
			}
		}
	}
}
